Validation হল ডেটা ইনপুটের সঠিকতা পরীক্ষা করার একটি প্রক্রিয়া। MVVM প্যাটার্নে, ডেটা ভ্যালিডেশন সাধারণত ViewModel বা Model-এ করা হয় এবং তার ফলাফল View-এ প্রদর্শিত হয়। Validation Summary এবং Error Templates হল দুটি উপায় যার মাধ্যমে ব্যবহারকারীর কাছে সঠিকভাবে ভ্যালিডেশন বার্তা এবং ইনপুট ফিল্ডের ত্রুটি দেখানো হয়।
এখানে Validation Summary এবং Error Templates তৈরি এবং কিভাবে এগুলি MVVM প্যাটার্নে ব্যবহার করা হয়, তা নিয়ে বিস্তারিত আলোচনা করা হয়েছে।
Validation Summary হলো একটি তালিকা বা সারাংশ, যা View-এ সমস্ত ত্রুটি বা ভ্যালিডেশন বার্তা প্রদর্শন করতে ব্যবহৃত হয়। এটি সাধারণত একটি TextBlock বা ListBox ব্যবহার করে তৈরি করা হয়, যেখানে সমস্ত ভ্যালিডেশন ত্রুটি একসাথে প্রদর্শিত হয়।
আপনি যখন Validation Summary তৈরি করতে চান, তখন Validation.Errors কালেকশন ব্যবহার করতে পারেন, যা Binding
ত্রুটির তালিকা ধারণ করে। এটি View-এ প্রদর্শন করার জন্য সাধারণত ValidationSummary এর মতো একটি কাস্টম উপাদান ব্যবহার করা হয়।
XAML Example:
<Window x:Class="ValidationSummaryExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Validation Summary" Height="350" Width="525">
<Grid>
<!-- Validation Summary -->
<StackPanel>
<TextBlock Text="Validation Errors:" FontWeight="Bold" />
<ListBox Name="ErrorList" Height="150" />
</StackPanel>
<!-- Form Fields with Validation -->
<StackPanel VerticalAlignment="Top">
<TextBox Name="NameTextBox" Width="200" Margin="10"
Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
<TextBox Name="EmailTextBox" Width="200" Margin="10"
Text="{Binding Email, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
<Button Content="Submit" Width="100" Height="30" Margin="10" />
</StackPanel>
</Grid>
</Window>
ViewModel Example:
public class MainViewModel : INotifyPropertyChanged, IDataErrorInfo
{
private string _name;
private string _email;
public string Name
{
get { return _name; }
set { _name = value; OnPropertyChanged(); }
}
public string Email
{
get { return _email; }
set { _email = value; OnPropertyChanged(); }
}
public string Error => null;
public string this[string propertyName]
{
get
{
if (propertyName == nameof(Name) && string.IsNullOrWhiteSpace(Name))
return "Name cannot be empty.";
if (propertyName == nameof(Email) && !Email.Contains("@"))
return "Invalid email address.";
return null;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
এখানে IDataErrorInfo ইন্টারফেস ব্যবহার করে ডেটা ভ্যালিডেশন পরিচালিত হচ্ছে এবং Name এবং Email এর জন্য Error বার্তা সেট করা হচ্ছে। Validation.Errors কালেকশন View-এ ভ্যালিডেশন ত্রুটি প্রদর্শন করবে।
Error Templates হল এমন একটি কাস্টম UI উপাদান যা ত্রুটির ক্ষেত্রে ইনপুট ফিল্ডের সজ্জা পরিবর্তন করে, যেমন টেক্সট বক্সের চারপাশে লাল বর্ডার বা ত্রুটি বার্তা দেখানো। Error Templates ব্যবহার করে আপনি নির্দিষ্ট ইনপুট ফিল্ডের ত্রুটি ফিডব্যাক ব্যবহারকারীকে স্পষ্টভাবে প্রদান করতে পারেন।
Error Template তৈরি করতে ControlTemplate বা Style ব্যবহার করা হয়। আপনি Validation.HasError প্রপার্টি ব্যবহার করে একটি ইনপুট ফিল্ডের ত্রুটি পরীক্ষা করতে পারেন এবং ত্রুটির ভিত্তিতে UI পরিবর্তন করতে পারেন।
XAML Example:
<Window x:Class="ErrorTemplateExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Error Template" Height="350" Width="525">
<Window.Resources>
<Style x:Key="ErrorStyle" TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.HasError)}" Value="True">
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="BorderThickness" Value="2" />
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<!-- Form Fields with Error Template -->
<TextBox Width="200" Height="30" Margin="10"
Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
Style="{StaticResource ErrorStyle}" />
<Button Content="Submit" Width="100" Height="30" Margin="10" />
</Grid>
</Window>
ViewModel Example:
public class MainViewModel : INotifyPropertyChanged, IDataErrorInfo
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; OnPropertyChanged(); }
}
public string Error => null;
public string this[string propertyName]
{
get
{
if (propertyName == nameof(Name) && string.IsNullOrWhiteSpace(Name))
return "Name cannot be empty.";
return null;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
এখানে TextBox-এর চারপাশে লাল বর্ডার এবং একটি টুলটিপ সঠিকভাবে ত্রুটি বার্তা দেখানোর জন্য ErrorTemplate তৈরি করা হয়েছে। Validation.HasError ব্যবহার করে ত্রুটি চেক করা হচ্ছে, এবং ToolTip এ ত্রুটি বার্তা দেখানো হচ্ছে।
এভাবে MVVM প্যাটার্নে Validation Summary এবং Error Templates ব্যবহার করে অ্যাপ্লিকেশনের ডেটা ইনপুটের সঠিকতা এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করা যায়।
common.read_more